// IDBH5Manager.aidl
package com.sgcc.pda.data;
// Declare any non-default types here with import statements
//供H5操作本地数据的接口
interface IDBH5Manager {
    /**
     * 初始化数据库：数据库名，加密密码，版本号（暂无用）
     * 调用此方法并不会创建数据库，只有在第一次创建表的时候，才会创建数据库
     * 注意：SQLite不强制数据类型约束。任何数据都可以插入任何列。
     * 但SQLite确实使用声明的列类型来指示你所期望的格式（列亲和性）；
     * 即整形列插入字符串时，会试图将字符串转为整形，如果转不了，就插入字符串。
     * @dbName 数据库名
     * @dbEncrypPwd 加密密钥
     * @version 版本号 （暂时无用，更新使用更新字段方法）
     */
    String initDatabase(String dbName, String dbEncrypPwd, int version);

    /**
     * 创建表 如果是第一张表，会创建数据库
     *
     * @dbName 数据库名
     * @tableName 表名
     * @tableMap 表定义的字段《String，String》=《字段名，字段类型》
     * 字段类型可以是INTEGER、TEXT、NUMERIC、NULL、REAL、BLOB、VARCHAR(10)等
     * 也可以带其他限制条件如：INTEGER PRIMARY KEY AUTOINCREMENT、INTEGER default 0
     */
    String create(String dbName, String tableName,inout Map tableMap);

    /**
     * 插入一条数据
     *
     * @param dbName    数据库名
     * @param tableName 数据表名
     * @param privateKey 主键名或者不能重复的字段名（注意，不是属性值）
     * @param dataMap   插入的数据集《字段名，字段值》
     * @return
     */
    String insertOne(String dbName, String tableName,String privateKey,inout Map dataMap);
    /**
     * 插入多条数据
     *
     * @param dbName
     * @param tableName
     * @param privateKey 主键名或者不能重复的字段名（注意，不是属性值）
     * @param dataMapListStr json 需要插入的数据集 List<Map<String, String>> 《字段名，字段值》
     * @return
     */
    String insertList(String dbName, String tableName, String privateKey,String dataMapListStr) ;
    /**
     * 删除表
     *
     * @param dbName    数据库名
     * @param tableName 表名
     * @return
     */
    String dropTable(String dbName, String tableName);

    /**
     * 清空数据表
     *
     * @param dbName    数据库名
     * @param tableName 表名
     * @return
     */
    String clear(String dbName, String tableName);
    /**
     * 更新数据
     *
     * @param dbName         数据库名
     * @param tableName      表名
     * @param dataMap        更新的数据 《字段名，更新的值》
     * @param whereCondition 条件语句  不带where
     * @return
     */
    String update(String dbName, String tableName,inout Map dataMap, String whereCondition);
    /**
     * 查询数据库：
     *
     * @param dbName             数据库名
     * @param tableName          表名
     * @param selectColumnNames  查询列名
     * @param whereCondition     where条件语句
     * @param groupByColumnNames groupby 语句
     * @param haveingCondition   haveing语句
     * @param orderByCondition   orderby语句
     * @param limitCondition     limit语句
     * @return 数据库信息json； key为字段名
     */
    String query(String dbName, String tableName, inout List<String> selectColumnNames,String whereCondition,inout List<String> groupByColumnNames, String haveingCondition, String orderByCondition, String limitCondition);

    /**
     * 联合查询数据库：
     *
     * @param dbName             数据库名
     * @param tableNames          表名(集合)
     * @param selectColumnNames  查询列名
     * @param whereConditions     where条件语句(若没有,传空字符串)
     * @param groupByColumnNames groupby 语句
     * @param haveingCondition   haveing语句
     * @param orderByCondition   orderby语句
     * @param limitCondition     limit语句
     * @return 数据库信息json； key为字段名
     */
    String joinQuery(String dbName,inout List<String> tableNames,inout List<String> selectColumnNames,inout List<String> whereConditions,
                                                inout List<String> groupByColumnNames, String haveingCondition, String orderByCondition, String limitCondition);

    /**
     * 删除数据
     *
     * @param dbName            数据库名
     * @param tableName         表名
     * @param whereCondition where语句
     * @return
     */
    String delete(String dbName, String tableName, String whereCondition);

    /**
     * 直接执行sql语句（支持查询）
     *
     * @param dbName
     * @param sqlStr
     * @return
     */
    String rawQuerySQL(String dbName, String sqlStr);

    /**
     * 直接执行sql语句（不支持查询）
     *
     * @param dbName
     * @param sqlStr
     * @return
     */
    String rawExecSQL(String dbName, String sqlStr);
    /**
     * 获取数据库信息
     *
     * @param dbName 数据库名
     * @return 数据库信息json：version=版本号；path=路径; tableList=数据库表名(含有系统表sqlite_master)
     */
    String getDBInfo(String dbName);

    /**
     * 获取表结构信息
     *
     * @param dbName    数据库名
     * @param tableName 表名
     * @return
     */
    String getTableStructureInfo(String dbName, String tableName);

    /**
     * 判断数据库中的 表是否存在
     *
     * @param dbName    数据库
     * @param tableName 表名
     * @return
     */
    String isTableExist(String dbName, String tableName);

    /**
     * 修改表名
     *
     * @param dbName
     * @param oldTableName 旧表表名
     * @param newTableName 新表表名
     * @return
     */
    String reNameTable(String dbName, String oldTableName, String newTableName);

    /**
     * 添加 表 字段
     *
     * @param dbName
     * @param tableName    表名
     * @param addColumnMap 字段map  <String, String>字段名 字段类型
     * @return
     */
    String addColumn(String dbName, String tableName,inout Map addColumnMap);

    /**
     * 执行事务
     *
     * @param dbName
     * @param sqlArray sql语句
     * @return
     */
    String transaction(String dbName,inout List<String> sqlArray);
    /**
     * 关闭指定数据库：数据库名
     * dbName 数据库名
     */
    String closeDatabase(String dbName);

    /**
     * 关闭所有数据库
     */
    String closeAllSqliteHelper();
}